シェルスクリプトの表示を豊かにするgumの使い方
どうも。CX事業本部Delivery部のえーたん(@eetann092)です。
gumが面白そうだったので素振りしました。 gumのREADMEを読んで特に気になった部分を例とともに紹介します。
gumとは?
gumはシェルスクリプトの表示に彩りを添えるツールです。
gumを入力や選択画面を簡単に実装したりスタイルを変更できます。
Charmには、gumの他にもいくつかのCLIツールが掲載されています。
style
gum style [--オプション] "行1" "行2" "行3" ...
の形式で、文字や背景、ボーダーの色などの装飾を指定して表示できます。
gum style \ --background="#FDEE0F" \ --foreground="#000904" \ --border="double" \ --border-background="#FDEE0F" \ --border-foreground="#F30057" \ --margin="1 2" \ --padding="0 3 3 0" \ '行1だよ!' \ '行2です' \ '行3だ!'
文字色や背景色はカラーコードで指定できます。 ボーダーのスタイルについては、実装によると2022-09-09現在は以下の6種類を指定できます。
double
hidden
none
normal
rounded
thick
margin
やpadding
についてはCSSと同じように【上下、左右】や【上、右、下、左】(時計回り)で指定できます。
join
gum join "$HOGE" "$FOO"
の形式で、styleの表示を上下や左右に並べて表示できます。
CM=$(gum style --background="#FDEE0F" --foreground="#000904" --width=20 --padding="2 4 0 4" --align="center" 'Classmethod') YEAR=$(gum style --background="#FDEE0F" --foreground="#41A1C1" --width=20 --padding="0 4 2 4" --align="right" '2022') gum join --align right --vertical "$CM" "$YEAR"
オプション--align
を使うことで寄せの指定もできます。
format
format
を使えば、絵文字やシンタックスハイライトを効かせた表示ができます。
以下はMarkdownの表示です。
echo "# 見出し\n## 見出し\n### 見出し\n- リスト\n- リスト\n---\n~~あい~~\`inline code\`う**え**お\n>引用" | gum format
Markdown以外のシンタックスハイライトについては、筆者の環境ではまだうまく表示できていないため、解決したら掲載します。
絵文字は、Slackのように:hoge:
の形式で入力できます。絵文字は、GitHubのAPIに掲載されているものが使えるそうです。
echo 'Kerry: :sunglasses: Yeah!' | gum format -t emoji
input
inputで入力画面を表示できます。
gum input --placeholder "Name?"
choose
chooseで選択画面を用意できます。
PERSON=$(gum choose "Kerry" "Johnny" "Goro") echo "Hello, $PERSON"
上下移動にはカーソルキーの他、CTRL + n
,CTRL + p
,j
,k
も使えます。
また、一番上の選択肢にはg
、一番下の選択肢にはshift + g
で移動できます。
なんだかVimっぽいですね。
--limit
や--no-limit
を使うことで、複数選択もできます。
confirm
confirmを使うことで、Yes/Noを簡単に表示できます。 Yesを選んだら終了ステータスは0、Noを選んだら1になります。
gum confirm "Yes?" && echo "Yeah!"
カーソルキーで移動、Enterで決定できます。
また、h
で左へl
で右へ移動したり、y
でYesを選択、n
でNoを選択できます。
write
writeを使えば、長文の入力画面を表示できます。
gum write
Enterは文章としての改行になるため、編集を完了したいときはCTRL + D
かエスケープキーを入力します。
filter
fzfのように「絞り込み」と「選択」ができます。
echo "Kerry\nJohnny\nGoro" | gum filter
spin
gum spin [オプション] -- コマンド
の形式で、指定したコマンド実行中にスピナーを表示できます。
gum spin -- sleep 2
オプション--spinner
で違うタイプのスピナーが表示できます。筆者の好みはmoon
です。
リンク集
本記事の執筆中にgumのドキュメント修正コントリビュートもしました。